package com.eoe.wiki.db.dao;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.text.TextUtils;

import com.eoe.wiki.db.UpdateColumn;
import com.eoe.wiki.db.WikiColumn;
import com.eoe.wiki.db.entity.UpdateEntity;
import com.eoe.wiki.utils.L;

public class UpdateDao extends GeneralDao<UpdateColumn> {

	public UpdateDao(Context context) {
		super(new UpdateColumn(), context);
	}
	
	public UpdateEntity getWikiUpdateByUrl(String url){
		Cursor cursor = queryByParameter(WikiColumn.URI, url);
		return buildWikiUpdateEntity(cursor);
	}
	
	public UpdateEntity buildWikiUpdateEntity(Cursor cursor){
		UpdateEntity entity = null;
		if(cursor!=null&&cursor.moveToFirst()){
			entity = new UpdateEntity();
			entity.setId(cursor.getLong(cursor.getColumnIndex(UpdateColumn._ID)));
			entity.setAddDate(cursor.getLong(cursor.getColumnIndex(UpdateColumn.DATE_ADD)));
			entity.setModifyDate(cursor.getLong(cursor.getColumnIndex(UpdateColumn.DATE_MODIFY)));
			entity.setUpdateDate(cursor.getLong(cursor.getColumnIndex(UpdateColumn.DATE_UPDATE)));
			entity.setUri(cursor.getString(cursor.getColumnIndex(UpdateColumn.URI)));
		}
		if(cursor!=null){
			cursor.close();
		}
		return entity;
	}
	
	public boolean addOrUpdateTime(String url){
		L.d("add or update time:" + url);
		if(TextUtils.isEmpty(url)){
			throw new IllegalArgumentException("need a url param");
		}
		UpdateEntity entity = getWikiUpdateByUrl(url);
		if(entity==null){
			saveTime(url);
		}else{
			
		}
		return true;
	}
	
	public boolean updateTime(UpdateEntity entity){
		if(entity==null){
			try {
				throw new IllegalAccessException("need a valid entity");
			} catch (IllegalAccessException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		L.d("refresh the update time" + entity.getUri());
		long current = System.currentTimeMillis();
		entity.setModifyDate(current);
		entity.setUpdateDate(current);
		if(update(change2ContentValues(entity))>0){
			return true;
		}
		return false;
	}
	public boolean saveTime(String url){
		L.d("save the update time:" + url);
		if(TextUtils.isEmpty(url)){
			throw new IllegalArgumentException("need a calid url");
		}
		UpdateEntity entity = new UpdateEntity();
		entity.setUri(url);
		long current = System.currentTimeMillis();
		entity.setAddDate(current);
		entity.setModifyDate(current);
		entity.setUpdateDate(current);
		
		if(insert(change2ContentValues(entity))!=null){
			return true;
		}
		return false;
	}
	
	public ContentValues change2ContentValues(UpdateEntity entity){
		ContentValues values = new ContentValues();
		if(entity.getId()>0){
			values.put(UpdateColumn._ID, entity.getId());
		}
		if(entity.getAddDate()>0){
			values.put(UpdateColumn.DATE_ADD, entity.getAddDate());
		}
		if(entity.getModifyDate()>0){
			values.put(UpdateColumn.DATE_MODIFY, entity.getModifyDate());
		}
		if(entity.getUpdateDate()>0){
			values.put(UpdateColumn.DATE_UPDATE, entity.getUpdateDate());
		}
		if(!TextUtils.isEmpty(entity.getUri())){
			values.put(UpdateColumn.URI, entity.getUri());
		}
		return values;
	}
}
